//
//  XMGRecommendViewController.m
//  百思不得姐
//
//  Created by 杨庆 on 2016/12/30.
//  Copyright © 2016年 杨庆. All rights reserved.
//

#import "XMGRecommendViewController.h"
#import <AFNetworking/AFNetworking.h>
#import <SVProgressHUD/SVProgressHUD.h>
#import "XMGRecemondCategoryCell.h"
#import "MJExtension.h"
#import "XMGRecemondCategory.h"
#import "XMGRecommendUserwCell.h"
#import "XMGRecommendUser.h"
#import "MJRefresh.h"

#define XMGSelectedCategory self.categorys[self.categoryTableView.indexPathForSelectedRow.row]


@interface XMGRecommendViewController ()<UITableViewDelegate,UITableViewDataSource>
@property (weak, nonatomic) IBOutlet UITableView *categoryTableView;
/** 左边的类别数据*/
@property(nonatomic,strong)NSArray*categorys;
@property(nonatomic,strong)NSArray*users;
/**右边的用户表格*/
@property (weak, nonatomic) IBOutlet UITableView *userTableView;

@property(nonatomic,strong)AFHTTPSessionManager * manager;

@property(nonatomic,strong)NSMutableDictionary*parms;

@end

@implementation XMGRecommendViewController
static NSString*const XMGCategoryId =@"category";
static NSString*const XMGUserId =@"user";

/** 保证整个控制器只有一个 manager*/
-(AFHTTPSessionManager *)manager{
	if (!_manager) {
		_manager=[AFHTTPSessionManager manager];
	}
	return _manager;
}

- (void)viewDidLoad {
    [super viewDidLoad];

	//初始化界面
	[self setupUI];
	//初始化类别界面
	[self setupCategory];
	//添加刷新控件
	[self setupRefresh];

}

/**
 *界面的初始化
 */
-(void)setupUI{
	//注册
	[self.categoryTableView registerNib:[UINib nibWithNibName:NSStringFromClass([XMGRecemondCategoryCell class]) bundle:nil] forCellReuseIdentifier:XMGCategoryId];
	//注册2
	/**表格注册好XMGUserId类型的cell*/
	[self.userTableView registerNib:[UINib nibWithNibName:NSStringFromClass([ XMGRecommendUserwCell class]) bundle:nil] forCellReuseIdentifier:XMGUserId];
	
	//设置 inset
	self.automaticallyAdjustsScrollViewInsets=NO;
	self.categoryTableView.contentInset=UIEdgeInsetsMake(64, 0, 0, 0);
	self.userTableView.contentInset=self.categoryTableView.contentInset;
	
	//设置行高
	self.userTableView.rowHeight=70;
	//设置标题
	self.title=@"推荐关注";
	//设置背景色
	self.view.backgroundColor= XMGColorbg;
	
	

}
/**
 *添加刷新控件
 */
-(void)setupRefresh{

	self.userTableView.mj_header=[MJRefreshStateHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewUsers)];
	
	
	self.userTableView.mj_footer= [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreUsers)];
	
	  self.userTableView.mj_footer.hidden=YES;
}

/**
 *加载左侧类别数据
 */
-(void)setupCategory{
	//添加蒙版,显示指示器
	[SVProgressHUD show];
	[SVProgressHUD showWithStatus:@"正在加载数据..."];
	[SVProgressHUD setDefaultMaskType:SVProgressHUDMaskTypeBlack];
	//发送请求
	NSMutableDictionary*parame=[NSMutableDictionary dictionary];
	parame[@"a"]=@"category";
	parame[@"c"]=@"subscribe";
	[self.manager GET:@"http://api.budejie.com/api/api_open.php" parameters:parame  progress:^(NSProgress * _Nonnull downloadProgress) {
				
	} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
		//隐藏指示器
		[SVProgressHUD dismiss];
		
		//第三方库中,已经将字典数组转成了模型数组
		self.categorys = [XMGRecemondCategory mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
		//刷新表格
		[self.categoryTableView reloadData];
		//默认选中第一行
		[self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionTop];
		
		//第一行的user进入下拉刷新状态
		[self.userTableView.mj_header beginRefreshing];
		
	} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
		
		//隐藏指示器
		[SVProgressHUD dismiss];
		[SVProgressHUD showErrorWithStatus:@"加载推荐信息失败!"];
	}];

}




#pragma mark - 加载用户数据
-(void)loadNewUsers{
	//左边表格选中的类型模型
	XMGRecemondCategory*rc=XMGSelectedCategory;

	//设置当前页码为1
	rc.currentPage = 1;
	NSMutableDictionary*params=[NSMutableDictionary dictionary];
	params[@"a"]=@"list";
	params[@"c"]=@"subscribe";
	params[@"category_id"]=@(rc.ID);
	params[@"page"]=@(rc.currentPage);
	
	self.parms=params;
	
	//发送请求给服务器, 加载右侧的数据
	[self.manager GET:@"http://api.budejie.com/api/api_open.php" parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
		
	} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {	//字典数组转为-->模型数组
						/**添加到当前类别对应的用户数组中--> 保证一个类别有自己的用户数据*/
		NSArray*array = [XMGRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
		
		//清除所有旧数据
		[rc.users removeAllObjects];
		//添加到当前类别对应的用户数组中
		[rc.users addObjectsFromArray:array];
		
		//保存总数
		rc.total = [responseObject[@"total"] integerValue];
		//只要处理(最后一次点击的类别)的数据
		if (self.parms!=params)return ;
		
		//刷新右边的表格
		[self.userTableView reloadData];
		//结束下拉刷新 header
		[self.userTableView.mj_header endRefreshing];

		//让底部控件结束刷新
		[self checkFooterState];
		
	} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
		//只要处理(最后一次点击的类别)的数据
		if (self.parms!=params)return ;
		
		//提醒
		[SVProgressHUD showErrorWithStatus:@"加载用户数据失败"];
		//结束下拉刷新 header
		[self.userTableView.mj_header endRefreshing];
	}];
	
	

}


-(void)loadMoreUsers{

	XMGRecemondCategory*category = XMGSelectedCategory;
	NSMutableDictionary*params=[NSMutableDictionary dictionary];
	params[@"a"]=@"list";
	params[@"c"]=@"subscribe";
	params[@"category_id"]=@(category.ID);
	params[@"page"]=@(++category.currentPage);
	self.parms=params;
	//发送请求给服务器, 加载右侧的数据
	[self.manager GET:@"http://api.budejie.com/api/api_open.php" parameters:params progress:^(NSProgress * _Nonnull downloadProgress) {
		
	} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
		
		/**字典数组转为-->模型数组*/
		
		//添加到当前类别对应的用户数组中--> 保证一个类别有自己的用户数据
	NSArray*array = [XMGRecommendUser mj_objectArrayWithKeyValuesArray:responseObject[@"list"]];
		//添加到 users 数组
		[category.users addObjectsFromArray:array];
		
		//只需要处理最后一次的数据请求
		if(self.parms!=params)return ;
		
		//刷新右边的表格
		[self.userTableView reloadData];
		//结束刷新
		if (category.users.count==category.total) {//全部加载完毕
			[self.userTableView.mj_footer endRefreshingWithNoMoreData];
			
		}else{
			[self.userTableView.mj_footer endRefreshing];
		}
		
		
	} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
		//获取数据 失败结束刷新
		[SVProgressHUD showErrorWithStatus:@"数据刷新失败"];
		[self.userTableView.mj_footer endRefreshing];
	}];

}

/**
 *时刻检测 footer 的状态
 */
-(void)checkFooterState{
	//每次刷新右边数据时,都控制footer显示或者隐藏
	self.userTableView.mj_footer.hidden=([XMGSelectedCategory count]==0);
	
	XMGRecemondCategory*rc=self.categorys[self.categoryTableView.indexPathForSelectedRow.row];
	
	//让底部控件结束刷新
	if (rc.users.count==rc.total) {//全部数据已经加载完成
		[self.userTableView.mj_footer endRefreshingWithNoMoreData];
	}else{//还没有加载完成
		[self.userTableView.mj_footer endRefreshing];
	}
	
}


#pragma mark-UITableViewDataSource

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
	XMGRecemondCategory*category=XMGSelectedCategory;
	if (tableView==_categoryTableView) {//tableView 是左边的"类别表格"
		return self.categorys.count;
		
	}else{//tableView是右边的"用户表格"
		
		//检测 footer 状态
		[self checkFooterState];
		//右边的用户表格
		return category.users.count;
	}
	
}


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
	
	if (tableView==_categoryTableView) {//左边的类别表格
		XMGRecemondCategoryCell*cell=[tableView dequeueReusableCellWithIdentifier:XMGCategoryId] ;
		
		cell.category=self.categorys[indexPath.row];
		return cell;

	}else{//右边的用户表格
		
		XMGRecommendUserwCell*cell=[tableView dequeueReusableCellWithIdentifier:XMGUserId] ;
		XMGRecemondCategory*c=self.categorys[self.categoryTableView.indexPathForSelectedRow.row];
		cell.user=c.users[indexPath.row];
		return cell;
	}
}

#pragma mark-UITableViewDelegate
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
	//取出点击的类别
	XMGRecemondCategory*category=self.categorys[indexPath.row];
	
	if (category.users.count) {// users 里面存放的是右边的数据
		
		//显示曾经的数据
		[self.userTableView reloadData];
		
	}else{
		
		//马上刷新表格 : 目的是马上显示当前category的用户数据
		[self.userTableView reloadData];
		//进入下拉刷新状态
		[self.userTableView.mj_header beginRefreshing];
		
	}
}

#pragma mark-控制器的销毁
/**控制器销毁*/
-(void)dealloc{
	//停止所有的操作
	[ self.manager.operationQueue cancelAllOperations];
}
@end
